/**========================================================================*
 *=========================================================================*
 *
 * @file                Flughafen.java
 *
 * @copyright           TECCO Software Entwicklung AG
 *
 *=========================================================================*
 *=========================================================================*/


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import corso.lang.*;


public class Flughafen
    extends JFrame implements ActionListener, WindowListener
{
    // GUI
    private JButton oeffnenButton;
    private JButton sperrenButton;
    private JButton exitButton;

    private Container container;

    // Flughafen
    private FlughafenInfo flughafenInfo;
    private int nLandebahnen;
    private String status;
    private String flughafenName;

    // CORSO
    private CorsoConnection con;


    /**====================================================================* 
     * constructor
     *=====================================================================*/  
    public Flughafen (String flughafenName, int nLandebahnen)  
    {
        if ((this.nLandebahnen = nLandebahnen) <= 0)
            System.exit (-2);

        this.flughafenName = new String (flughafenName);
        System.out.println (flughafenName + " with " + nLandebahnen +
                            " Landebahnen");

        container = getContentPane ();
        setTitle ("Tower Flughafen " + flughafenName);
        setLocation (0, 0);
        setSize (260, 200);  
        container.setLayout (new GridLayout (3, 1));
        
        //---------------
        // OEFFNEN BUTTON
        //---------------
        oeffnenButton = new JButton ();
        oeffnenButton.setFont (new Font (null, Font.BOLD, 24));       // null = use default font name
        oeffnenButton.setText ("OEFFNEN");
        oeffnenButton.setBackground (CourseUtil.green ());
        container.add (oeffnenButton);
        oeffnenButton.addActionListener (new java.awt.event.ActionListener()
        {
            public void actionPerformed (ActionEvent e)
                {
                    oeffnenButton_actionPerformed (e);
                }
        });
               
        //---------------
        // SPERREN BUTTON
        //---------------
        sperrenButton = new JButton ();
        sperrenButton.setText ("SPERREN");
        sperrenButton.setFont (new Font (null, Font.BOLD, 24));       // null = use default font name
        sperrenButton.setBackground (CourseUtil.red ());
        container.add (sperrenButton);
        sperrenButton.addActionListener (new java.awt.event.ActionListener()
        {
            public void actionPerformed (ActionEvent e)
                {
                    sperrenButton_actionPerformed (e);
                }
        });
               
        //---------------
        // EXIT BUTTON
        //---------------
        exitButton = new JButton ();
        exitButton.setText ("EXIT");
        exitButton.setFont (new Font (null, Font.BOLD, 24));       // null = use default font name
        container.add (exitButton);
        exitButton.addActionListener (new java.awt.event.ActionListener()
        {
            public void actionPerformed (ActionEvent e)
                {
                    exitButton_actionPerformed (e);
                }
        });
               
        addWindowListener (this);   
        setVisible (true); 


        //-----------------
        // connect zu CORSO
        //-----------------
        CorsoConnection con = new CorsoConnection ();
        try
        {
            
            System.err.println("CourseUtil.SITE = " + CourseUtil.SITE ); 
            
            System.err.println("CourseUtil.USERNAME = " + CourseUtil.USERNAME );
            System.err.println("CourseUtil.PASSWORD = " + CourseUtil.PASSWORD );
            System.err.println("CourseUtil.PORT = " + CourseUtil.PORT );
            con.connect (CourseUtil.USERNAME,
                         CourseUtil.PASSWORD,
                         new CorsoStrategy (CourseUtil.STRATEGY),
                         CourseUtil.AID,
                         "",
                         CourseUtil.SITE,
                         CourseUtil.DOMAIN,
                         CourseUtil.PORT);

            System.out.println ("Connect ok");
        }
        catch (Exception e)
        {
            System.out.println ("Exception: " + e);
            e.printStackTrace ();
            System.exit (-3);
        }
        
        //--------------------------------------------------------
        // hole das named object f?r den Flughafen oder lege es an
        //--------------------------------------------------------
        CorsoVarOid namedOid = new CorsoVarOid ();
        try
        {
            namedOid = con.getNamedVarOid (flughafenName,
                                           CourseUtil.SITE,
                                           null,
                                           false,
                                           CorsoConnection.NO_TIMEOUT);

            //---------------------------------------
            // gefunden -> Einlesen der FlughafenInfo
            //---------------------------------------
            System.out.println ("Flughafen gefunden: oid = " + namedOid);
            flughafenInfo = new FlughafenInfo (namedOid);
            System.out.println ("Flughafen initialisiert");
        }
        catch (CorsoException e1)
        {
            //------------------------------
            // nicht gefunden -> neu anlegen
            //------------------------------
            System.out.println ("Flughafen nicht gefunden");
            try
            {
                namedOid = con.createNamedVarOid (con.getCurrentStrategy (),
                                                  flughafenName,
                                                  null);
                
                // neuen Flughafen anlegen und initialisieren
                flughafenInfo = new FlughafenInfo (nLandebahnen, con);
                namedOid.writeShareable (flughafenInfo, 
                                         CorsoConnection.INFINITE_TIMEOUT);

                // initial setze Flughafen auf gesperrt
                System.out.println ("Neuen Flughafen angelegt");
                System.out.println ("Flughafen ist initial gesperrt");
            }
            catch (CorsoException e2)
            {
                System.out.println ("Cannot create named oid " + e2);
                System.exit (-4);
            }
        }
    }
    
    

    /**==================================================================== 
     * ACTION EVENT HANDLER functions  
     *=====================================================================*/  
    public void actionPerformed (ActionEvent e) 
    {
        System.out.println ("GUI: actionPerformed: Event Fired: " + 
          e.getActionCommand ());
    }



    /**==================================================================== 
     * further ACTION EVENT HANDLER functions  
     *=====================================================================*/  
    public void windowClosing (WindowEvent e) { System.exit (0); }
    public void windowClosed (WindowEvent e) {}  
    public void windowOpened (WindowEvent e) {}   
    public void windowIconified (WindowEvent e) {} 
    public void windowDeiconified (WindowEvent e) {}
    public void windowActivated (WindowEvent e) {}  
    public void windowDeactivated (WindowEvent e) {} 
    


    //========================================================================
    // ?FFNEN button pressed
    //=======================================================================
    void oeffnenButton_actionPerformed (ActionEvent e)
    {
        System.out.println ("OEFFNEN BUTTON PRESSED");
        status = CourseUtil.GEOEFFNET;
        flughafenInfo.setTowerStatus (status);
    }



    //========================================================================
    // SPERREN button pressed
    //=======================================================================
    void sperrenButton_actionPerformed (ActionEvent e)
    {
        System.out.println ("SPERREN BUTTON PRESSED");
        status = CourseUtil.GESPERRT;
        flughafenInfo.setTowerStatus (status);
    }



    //========================================================================
    // EXIT button pressed
    //=======================================================================
    void exitButton_actionPerformed (ActionEvent e)
    {
        System.out.println ("EXIT BUTTON PRESSED: bye bye");
        System.exit (0);
    }



    /**==================================================================== 
     * MAIN
     *=====================================================================*/  
    public static void main (String [] args)
    {
        if (args.length != 2)
        {
            System.out.println ("CALL: Flughafen <name> <nLandebahnen>");
            System.exit (-1);
        }

        new Flughafen (args[0], Integer.parseInt (args[1]));
    }
}



/**========================================================================*
 *=========================================================================*
 * EOF Flughafen.java
 *=========================================================================*
 *=========================================================================*/
